/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tamnhat.controller;

import com.tamnhat.entity.Category;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author Administrator
 */
public class CategoryController implements Serializable {

    private String id;
    private String code;
    private String name;
    private String parent_id;
    private DataModel items;
    private String nameS;
    private Category currentCate;
    private Category oldCurrentCate;
    private List<Category> listCate = new ArrayList<Category>();

    /**
     * Creates a new instance of CategoryController
     */
    public CategoryController() {
        try {
            listCate = currentCate.allCate("");
            items = new ListDataModel(listCate);
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
    }

    public Category getOldCurrentCate() {
        return oldCurrentCate;
    }

    public void setOldCurrentCate(Category oldCurrentCate) {
        this.oldCurrentCate = oldCurrentCate;
    }

    public List<Category> getListCate() {
        return listCate;
    }

    public void setListCate(List<Category> listCate) {
        this.listCate = listCate;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getParent_id() {
        return parent_id;
    }

    public void setParent_id(String parent_id) {
        this.parent_id = parent_id;
    }

    public DataModel getItems() {
        return items;
    }

    public void setItems(DataModel items) {
        this.items = items;
    }

    public String getNameS() {
        return nameS;
    }

    public void setNameS(String nameS) {
        this.nameS = nameS;
    }

    public Category getCurrentCate() {
        return currentCate;
    }

    public void setCurrentCate(Category currentCate) {
        this.currentCate = currentCate;
    }

    public String search() {
        try {
            listCate = currentCate.allCate(" where upper(name) like '%" + nameS.toUpperCase() + "%' ");
            items = new ListDataModel(listCate);
            int i = listCate.size();
            if (i > 0) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Có " + i + " bản ghi được tìm thấy!"));
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Không có bản ghi nào được tìm thấy!"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String remove() {
        try {
            currentCate = (Category) items.getRowData();
            if (currentCate.remove()) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xóa bản ghi thành công!"));
                listCate.remove(currentCate);
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xảy ra lỗi trong quá trình xử lí!"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String updateForEdit() {
        currentCate = (Category) items.getRowData();
        oldCurrentCate = currentCate;        
        return "";
    }

    public String update() {
        try {
            if (checkInput()) {                
                if (currentCate.update()) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Cập nhật bản ghi thành công!"));                    
                } else {
                    currentCate = oldCurrentCate;
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xảy ra lỗi trong quá trình xử lí!"));
                }
            }
        } catch (Exception e) {
            currentCate = oldCurrentCate;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public boolean checkInput() {
        if (currentCate.getCode() == null || currentCate.getCode().equalsIgnoreCase("") || currentCate.getName() == null || currentCate.getName().equalsIgnoreCase("")) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Không được để trống trường code hoặc name!"));
            return false;
        }
        if (currentCate.getParent_id() == null || currentCate.getParent_id().equalsIgnoreCase("")) {
            return true;
        } else {
            try {
                if (Category.checkCateId(currentCate.getParent_id())) {
                    return true;
                }
            } catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
                e.printStackTrace();
            }
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Parent Id bạn nhâp không tồn tại!"));
            return false;
        }
    }
    
    public String updateInsert(){
        currentCate = new Category();
        return "";
    }
    
    public String insert() {
        try {
            if (checkInput()) {
                if (currentCate.insert()) {        
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Thêm bản ghi thành công!"));
                    listCate.add(currentCate);
                } else {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xảy ra lỗi trong quá trình xử lí!"));
                }
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }
}
